The present invention relates to a descriptor based memory queuing system for transmitting data packets to a one or more transmit ports in a device of a computer network, and in particular to a system where duplicate buffers can be detected.
Many computer network devices, such as bridges, routers, switches and/or hubs, receive data packets and must then forward these packets to one or more transmit ports. The determination of which transmit ports a particular packet is to be sent to, is performed by the higher logic of the network device and is already well known to those skilled in the art. The speed at which each transmit port can send out data packets depends on the speed of the connection, the speed of the receiving port and other factors that can change for each port. Also a data packet can be sent to more than one port at a time, in a process known as multicasting, broadcasting and flooding.
Therefore it is important that the status of the individual transmit ports be closely coordinated with the presence of data packets which are to be sent out on those ports. This can be done using transmit queues for each transmit port and copying a pointer or descriptor into the proper transmit queue which points to the address of a buffer in a main-data memory which stores the data packet.
A problem in this descriptor queuing scheme is duplication of buffer descriptors. Generally, these problems result from logic errors in the buffer descriptor management. Duplication of buffers is potentially a serious problem as bad packets may be sent. Bad packets may take the form of non-sense packets and/or well formed packets transmitted on an unintended port. The later having great consequence to network configuration and security.
It is a primary object of the present invention to provide early detection of duplicate buffers and the timely shutdown of the offending transmit queues. This makes for buffer management in the present invention to be exceptionally robust.
In order to accomplish early detection, the Queuing Control logic must track the state of the descriptor and corresponding value in the Descriptor Reference Memory. The Queuing Control logic will flag illegal operations and optionally reinitialize the offending queue(s).
In particular, a main data memory is provided in the network device and includes a plurality of buffers for storing data packets. A plurality of descriptors, or pointers, point to the individual buffers. A status of the descriptors is stored in a descriptor reference memory. The status information includes whether the descriptors are in an active or free state, and an indication of copies of the descriptors in the transmit queues. A descriptor free pool includes a list of the descriptors in the free state.
When the system receives a data packet, it takes a one of the descriptors from the descriptor free pool and checks the status information in the descriptor reference memory for that descriptor. If the checking reveals the status information is the active state, a duplicate buffer error is indicated. If the status information indicates the free state, the system stores the data packet in the buffer of the main memory as pointed to by that descriptor.
The system, and more particularly the queue control logic, places a copy of the descriptor in one or more of the plurality of transmit queues of which the queue control logic has previously determined the data packet should be sent out on. The queue control logic then changes the status information in the descriptor reference memory from the free state to the active state and records an indication of the copies of the one descriptor placed in the plurality of transmit queues.
The indication of the copies can be a counting of the number of copies in each transmit queue or port, or having a separate marker for each xe2x80x9ccopyxe2x80x9d placed in a transmit queue. A further possibility is a separate marker for each xe2x80x9ctransmit queuexe2x80x9d with different states of the marker indicating whether that transmit queue includes a copy of the respective descriptor.
The queue control logic transmits the data packets from the main data memory and out the transmit ports according to the copies of the descriptors in the respective transmit queues. The queue control logic then removes the corresponding copies of the descriptors from the respective transmit queues, and decrements the indication of copies of the one descriptor each time, the copy of the one descriptor is removed from the plurality of transmit queues.
Before the decrementing, the status information in the descriptor reference memory for to be decremented descriptor is checked. The system indicates a duplicate buffer error if the checking before the decrementing reveals the status information is the free state.
When the indication of copies is empty or null, the queue control logic returns the one descriptor to the descriptor free pool and changes the status information from the active state to the free state.
The various features of novelty which characterize the invention are pointed out with particularity in the claims annexed to and forming a part of this disclosure. For a better understanding of the invention, its operating advantages and specific objects attained by its uses, reference is made to the accompanying drawings and descriptive matter in which preferred embodiments of the invention are illustrated.